<h3>插件对象</h3>
<p>
    <code>$GLOBAL['obj_plugin']</code> 是系统中的一个全局对象，您可以在任何地方使用这个对象（除插件本身外）。
</p>

<p>
    开发者开发的插件类中必须使用该类的引用，在实例化时会通过参数引用到构造函数中，在插件类中可以直接使用这个类，例如：
</p>

<h5>插件对象引用示例</h5>
<p>
<pre class="border rounded"><code class="language-php">if (!class_exists('PLUGIN_HELLO')) { //防止类重复
    class PLUGIN_HELLO {
        public $opts = array();
        public $obj_plugin;

        //构造函数的参数是 obj_plugin 的引用
        function __construct(&amp;$obj_plugin) {
            $this-&gt;obj_plugin = $obj_plugin;

            $this-&gt;obj_plugin-&gt;register('filter_console_link_add', $this, 'say_hello');
        }
    }
}</code></pre>
</p>

<div>&nbsp;</div>
<div class="text-right">
    <a href="#top">
        <span class="oi oi-chevron-top"></span>
        top
    </a>
</div>
<hr>
<div>&nbsp;</div>

<a name="attr"></a>
<h3>属性</h3>
<hr>
<div>&nbsp;</div>

<div class="table-responsive">
    <table class="table table-bordered">
        <thead>
            <tr>
                <th>属性</th>
                <th>类型</th>
                <th>说明</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><a href="#opts">opts</a></td>
                <td>array</td>
                <td>用户设置</td>
            </tr>
        </tbody>
    </table>
</div>

<div>&nbsp;</div>
<div class="text-right">
    <a href="#top">
        <span class="oi oi-chevron-top"></span>
        top
    </a>
</div>
<hr>
<div>&nbsp;</div>

<a name="opts"></a>
<h4><code>opts</code></h4>

<p class="text-info">说明</p>
<p>用户设置，多维数组，用户对包括所有已安装插件的设置，键名为插件的类名。务必与 config.php 中的 class 一致。</p>

<div>&nbsp;</div>
<h5>数据示例</h5>
<code>print_r($GLOBAL['obj_plugin']-&gt;opts)</code>
<p>
<pre class="border rounded"><code class="language-php">Array (
    [hello] =&gt; array(
        [text] =&gt; 文本框
        [textarea] =&gt; 文本域
        [select] =&gt; opt_1
        [radio] =&gt; opt_1
    )
    [example] =&gt; array(
        [text] =&gt; 文本框
        [textarea] =&gt; 文本域
        [select] =&gt; opt_1
        [radio] =&gt; opt_1
    )
)</code></pre>
</p>

<div>&nbsp;</div>
<div class="text-right">
    <a href="#top">
        <span class="oi oi-chevron-top"></span>
        top
    </a>
</div>
<hr>
<div>&nbsp;</div>

<a name="method"></a>
<h3>方法</h3>
<hr>
<div>&nbsp;</div>

<div class="table-responsive">
    <table class="table table-bordered">
        <thead>
            <tr>
                <th>方法</th>
                <th>说明</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><a href="#register">register</a></td>
                <td>注册需要监听的方法</td>
            </tr>
            <tr>
                <td><a href="#trigger">trigger</a></td>
                <td>挂载一个钩子</td>
            </tr>
        </tbody>
    </table>
</div>

<div>&nbsp;</div>
<div class="text-right">
    <a href="#top">
        <span class="oi oi-chevron-top"></span>
        top
    </a>
</div>
<hr>
<div>&nbsp;</div>

<a name="register"></a>
<h4><code>register($hook, &$reference, $method)</code></h4>

<p class="text-info">说明</p>
<p>注册需要监听的方法，一般用在插件内。</p>

    <h4>参数</h4>
    <div class="table-responsive">
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th class="text-nowrap">名称</th>
                    <th class="text-nowrap">类型</th>
                    <th class="text-nowrap">必需</th>
                    <th>描述</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td class="text-nowrap">hook</td>
                    <td class="text-nowrap">string</td>
                    <td class="text-nowrap">true</td>
                    <td>钩子的名称，详情请查看 <a href="{$BG_URL_HELP}index.php?m=plugin&a=hook">钩子列表</a>。</td>
                </tr>
                <tr>
                    <td class="text-nowrap">reference</td>
                    <td class="text-nowrap">object</td>
                    <td class="text-nowrap">true</td>
                    <td>对象引用，一般为本类。</td>
                </tr>
                <tr>
                    <td class="text-nowrap">method</td>
                    <td class="text-nowrap">string</td>
                    <td class="text-nowrap">true</td>
                    <td>方法名，插件所执行的方法。</td>
                </tr>
            </tbody>
        </table>
    </div>

<h4>返回</h4>
<p>无</p>

<div>&nbsp;</div>
<h5>示例代码</h5>
<p>
<pre class="border rounded"><code class="language-php">class PLUGIN_HELLO {
    function __construct(&$obj_plugin) {
        $obj_plugin->register('hello', $this, 'say_hello');
    }
)</code></pre>
</p>

<div>&nbsp;</div>
<div class="text-right">
    <a href="#top">
        <span class="oi oi-chevron-top"></span>
        top
    </a>
</div>
<hr>
<div>&nbsp;</div>

<a name="trigger"></a>
<h4><code>trigger($hook, $data)</code></h4>

<p class="text-info">说明</p>
<p>
    挂载一个钩子，此方法允许开发者把一些功能挂载到系统中，一般用在模板中。系统中已预先设置了一些钩子，开发者可以根据需要使用。
</p>
<p>
    开发者使用本方法时，必须使用自定义钩子名，命名方式请查看 <a href="{$BG_URL_HELP}index.php?m=plugin&a=hook">插件钩子</a>。
</p>

    <h4>参数</h4>
    <div class="table-responsive">
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th class="text-nowrap">名称</th>
                    <th class="text-nowrap">类型</th>
                    <th class="text-nowrap">必需</th>
                    <th>描述</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td class="text-nowrap">hook</td>
                    <td class="text-nowrap">string</td>
                    <td class="text-nowrap">true</td>
                    <td>钩子的名称，详情请查看 <a href="{$BG_URL_HELP}index.php?m=plugin&a=hook">插件钩子</a>。</td>
                </tr>
                <tr>
                    <td class="text-nowrap">data</td>
                    <td class="text-nowrap">mixed</td>
                    <td class="text-nowrap">false</td>
                    <td>钩子的传入参数。</td>
                </tr>
            </tbody>
        </table>
    </div>

<div>&nbsp;</div>

    <h4>返回结果</h4>
    <div class="table-responsive">
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th class="text-nowrap">名称</th>
                    <th class="text-nowrap">类型</th>
                    <th>描述</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td class="text-nowrap">plugin</td>
                    <td class="text-nowrap">string</td>
                    <td>插件类名->插件方法</td>
                </tr>
                <tr>
                    <td class="text-nowrap">return</td>
                    <td class="text-nowrap">mixed</td>
                    <td>插件相关方法的返回值。</td>
                </tr>
            </tbody>
        </table>
    </div>

<div>&nbsp;</div>
<h5>示例代码</h5>
<p>
<pre class="border rounded"><code class="language-php">$GLOBALS['obj_plugin']->trigger('hello');</code></pre>
</p>

<div>&nbsp;</div>
<h5>返回示例</h5>
<p>
<pre class="border rounded"><code class="language-php">Array (
    [filter_console_article_add] = Array(
        [plugin] =&gt; 插件类名->插件方法
        [return] =&gt; array()
    )
    [filter_console_article_edit] = Array(
        [plugin] =&gt; 插件类名->插件方法
        [return] =&gt; array()
    )
)</code></pre>
</p>
